"""
个人任务管理器主程序
"""

import sys
import os

# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from services.task_service import TaskService
from models.database import DatabaseManager
from config.settings import settings


def main():
    """主程序入口"""
    try:
        print("=" * 50)
        print("🎯 个人任务管理器")
        print("=" * 50)
        
        # 初始化数据库和服务
        print("正在初始化数据库...")
        db_manager = DatabaseManager(settings.get_database_path())
        task_service = TaskService(db_manager)
        
        print("✅ 数据库初始化完成")
        print("📊 系统状态:")
        
        # 显示系统统计信息
        stats = task_service.get_task_statistics()
        print(f"   总任务数: {stats.get('total', 0)}")
        print(f"   待办任务: {stats.get('todo', 0)}")
        print(f"   进行中任务: {stats.get('in_progress', 0)}")
        print(f"   已完成任务: {stats.get('completed', 0)}")
        print(f"   完成率: {stats.get('completion_rate', 0)}%")
        
        # 显示过期和即将到期的任务
        overdue_tasks = task_service.get_overdue_tasks()
        upcoming_tasks = task_service.get_upcoming_tasks()
        
        if overdue_tasks:
            print(f"⚠️  过期任务: {len(overdue_tasks)} 个")
        
        if upcoming_tasks:
            print(f"📅 即将到期: {len(upcoming_tasks)} 个")
        
        print("\n" + "=" * 50)
        print("🚀 系统已就绪！")
        print("💡 提示: 当前版本为第二阶段开发版本")
        print("📋 已实现功能:")
        print("   ✅ 数据库层和模型层")
        print("   ✅ 业务逻辑层")
        print("   ✅ 数据验证和工具函数")
        print("   ✅ 基础测试框架")
        print("\n🔧 第三阶段：命令行界面已完成！")
        print("=" * 50)
        
        # 如果有命令行参数，使用 CLI 模式
        if len(sys.argv) > 1:
            # 检查是否是 GUI 模式
            if sys.argv[1] == 'gui':
                return start_gui_mode(task_service)
            else:
                from ui.cli import TaskCLI
                cli = TaskCLI(task_service)
                return cli.run()
        
        # 否则显示模式选择
        print("\n🎮 欢迎使用个人任务管理器！")
        print("💡 请选择使用模式:")
        print("   1. 图形界面模式 (GUI) - 推荐")
        print("   2. 命令行交互模式 (CLI)")
        print("   3. 查看功能演示")
        print("   4. 退出程序")
        print("\n" + "=" * 50)
        
        while True:
            try:
                choice = input("\n请输入选择 (1-4): ").strip()
                
                if choice == '1':
                    return start_gui_mode(task_service)
                elif choice == '2':
                    return start_cli_mode(task_service)
                elif choice == '3':
                    return start_demo_mode()
                elif choice == '4':
                    print("👋 再见！")
                    return 0
                else:
                    print("❌ 无效选择，请输入 1-4")
                    
            except KeyboardInterrupt:
                print("\n👋 再见！")
                return 0
            except Exception as e:
                print(f"❌ 输入错误: {e}")
        
    except Exception as e:
        print(f"❌ 系统初始化失败: {str(e)}")
        sys.exit(1)


def start_gui_mode(task_service: TaskService):
    """启动图形界面模式"""
    try:
        print("\n🎨 正在启动图形界面...")
        print("💡 提示: 如果无法启动 GUI，请确保已安装 pygame")
        print("   安装命令: pip install pygame")
        
        # 先检查pygame是否可用
        import pygame
        pygame.init()
        
        from ui.gui import TaskManagerGUI
        gui = TaskManagerGUI(task_service)
        return gui.run()
        
    except ImportError as e:
        print(f"❌ 无法导入 pygame，请先安装:")
        print("   pip install pygame")
        print(f"   错误详情: {e}")
        print("\n🔄 自动切换到命令行模式...")
        return start_cli_mode(task_service)
    except Exception as e:
        print(f"❌ GUI 启动失败: {e}")
        print("\n🔄 自动切换到命令行模式...")
        return start_cli_mode(task_service)


def start_cli_mode(task_service: TaskService):
    """启动命令行交互模式"""
    print("\n💻 启动命令行交互模式...")
    print("💡 输入 'help' 查看可用命令，输入 'quit' 退出")
    
    from ui.cli import TaskCLI
    cli = TaskCLI(task_service)
    return cli._handle_interactive(None)


def start_demo_mode():
    """启动演示模式"""
    print("\n🎯 启动功能演示...")
    try:
        import subprocess
        result = subprocess.run([sys.executable, 'demo.py'], 
                              capture_output=False, text=True)
        return result.returncode
    except Exception as e:
        print(f"❌ 演示启动失败: {e}")
        print("💡 请手动运行: python demo.py")
        return 1


def show_usage_info(task_service: TaskService):
    """显示使用说明"""
    print("\n🎮 使用说明:")
    print("=" * 50)
    print("📝 基本命令:")
    print("  python main.py gui           # 启动图形界面")
    print("  python main.py add \"任务标题\" -p high -c 学习")
    print("  python main.py list --status todo")
    print("  python main.py edit 1 -t \"新标题\"")
    print("  python main.py complete 1")
    print("  python main.py search \"关键词\"")
    print("  python main.py stats")
    print("  python main.py interactive  # 进入交互模式")
    print("\n📖 查看完整帮助:")
    print("  python main.py --help")
    print("\n🎯 快速开始:")
    print("  python main.py gui          # 推荐使用图形界面")
    print("  python main.py interactive  # 或使用命令行模式")
    
    # 显示当前系统状态
    stats = task_service.get_task_statistics()
    if stats.get('total', 0) > 0:
        print(f"\n📊 当前状态: {stats.get('total')} 个任务")
        if stats.get('overdue_count', 0) > 0:
            print(f"⚠️  注意: 有 {stats.get('overdue_count')} 个任务已过期")


if __name__ == "__main__":
    main()
